package com.cd826dong.clouddemo.api;

import com.cd826dong.clouddemo.dto.UserDto;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController()
@RequestMapping("/restTemplateApi")
public class RestTemplateApi {

//    @Autowired
//    @Qualifier(value = "restTemplate")
//    private RestTemplate restTemplate;

//    对于用户微服务的安全改造和前面的改造一致， 这里就不重复
//    了。 当改造用户微服务之后如果再访问商品评论服务会发现依然会报
//    未认证异常的错误， 这是由于通过商品微服务调用用户服务时， 并没
//    有将认证信息传递给用户服务造成的。 那么如何传递该认证信息呢？
//    我们平常在调用其他微服务时是通过默认的RestTemplate进行调用，
//    该类并不会自动处理OAuth认证的相关信息， 需要将微服务调用更改
//    成使用OAuth2RestTemplate类， 该类在发起请求时可以自动将原来请
//    求中所包含的访问令牌进行转发。 具体代码如下：
//    @Autowired
//    private OAuth2RestTemplate restTemplate;

    @Autowired
    @Qualifier(value = "jwtRestTemplate")
    private RestTemplate restTemplate;

    //fallbackMethod：设定HystrixCommand服务降级所使用的方法名
    //称，注意该方法需要与主方法定义在同一个类中，并且方法签名也要
    //一致。
    @RequestMapping(value = "test", method = RequestMethod.GET)
    //@HystrixCommand(fallbackMethod = "fallback")
    public String restTemplateTest(){
        return restTemplate.getForEntity("http://127.0.0.1:2100/hello/{name}", String.class, "restTemplate").getBody();
    }

    //public String fallback(){
     //   return "i am fallback";
    //}

}
